package com.gxy.learn.algorithm.sort;

/**
 * 选择排序（Selection sort）是一种简单直观的排序算法。它的工作原理是：第一次从待排序的数据元素中选出最小（或最大）的一个元素，存放在序列的起始位置，
 * 然后再从剩余的未排序元素中寻找到最小（大）元素，然后放到已排序的序列的末尾。以此类推，直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法
 *
 * @author: Gaoxueyong
 * @createDate: 2023/1/5 22:26
 */
public class SelectionSort {
    public static void main(String[] args) {
        int[] arry = {3, 8, 5, 7, 2, 6, 1, 4};
        for (int i = 0; i < arry.length; i++) {
            for (int j = i + 1; j < arry.length; j++) {
                if (arry[j] < arry[i]) {
                    swap(arry, i, j);
                }
            }
            print(arry, i);
        }
    }

    /**
     * 在数组arry中交换 i和j的位置
     *
     * @param arry
     * @param i
     * @param j
     * @return: void
     * @author: Gaoxueyong
     * @time: 2023/1/5 11:14 PM
     */
    static void swap(int[] arry, int i, int j) {
        int temp = arry[j];
        arry[j] = arry[i];
        arry[i] = temp;
    }

    /**
     * 数组打印
     *
     * @param arry  需要打印的数组
     * @param index 第几次打印
     * @return: void
     * @author: Gaoxueyong
     * @time: 2023/1/5 11:18 PM
     */
    static void print(int[] arry, int index) {
        System.out.println(String.format("第[%d]次排序", index + 1));
        for (int num : arry) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}
